package com.sourcetrip.algorithm.sort.bubble;

import com.sourcetrip.algorithm.abs.AbstractCustomedObjectSort;

import java.util.Comparator;

/**
 * @author: ZhouBert
 * @date: 2020/12/29
 * @description: 十大排序算法之一：冒泡排序（的对象比较版本）
 */
public class BubbleCustomedSortV0<E> extends AbstractCustomedObjectSort<E> {


	public BubbleCustomedSortV0() {
	}

	public BubbleCustomedSortV0(E[] elements, Comparator<E> comparator) {
		super(elements, comparator);
	}

	public BubbleCustomedSortV0(E[] elements) {
		super(elements);
	}


	/**
	 * 冒泡排序
	 * TODO:必须牢记冒泡的双循环模板！
	 * 算法步骤：
	 * 从开始到末尾，相邻两个元素之间进行比较，如果发现大的元素就交换到后面。
	 * @param objectArr
	 */
	@Override
	protected void sortArr(E[] objectArr) {
		for (int end = objectArr.length - 1; end > 0; end--) {
			for (int i = 1; i <= end; i++) {
				if (compare(objectArr[i - 1], objectArr[i]) > 0) {
					swap(i - 1, i);
				}
			}
		}
	}
}
